package com.ruoyi.collect.service;

import com.ruoyi.collect.domain.CollectTask;

/**
 * 采集引擎服务接口
 * 执行采集任务的主要服务
 *
 * @author ruoyi
 * @date 2025-11-07
 */
public interface ICollectEngineService {

    /**
     * 执行采集任务
     *
     * @param taskId 任务ID
     * @return 如果执行成功启动返回true
     */
    public boolean executeTask(Long taskId);

    /**
     * 异步执行采集任务
     *
     * @param taskId 任务ID
     */
    public void executeTaskAsync(Long taskId);

    /**
     * 采集站点所有数据
     *
     * @param siteId 站点ID
     * @return 为此采集创建的任务
     */
    public CollectTask collectAll(Long siteId);

    /**
     * 采集站点最新数据
     *
     * @param siteId 站点ID
     * @param hours 回看的小时数
     * @return 为此采集创建的任务
     */
    public CollectTask collectRecent(Long siteId, Integer hours);

    /**
     * 按类型采集站点数据
     *
     * @param siteId 站点ID
     * @param typeId 远程类型ID
     * @return 为此采集创建的任务
     */
    public CollectTask collectByType(Long siteId, String typeId);

    /**
     * 按ID采集站点数据
     *
     * @param siteId 站点ID
     * @param ids 逗号分隔的ID列表
     * @return 为此采集创建的任务
     */
    public CollectTask collectByIds(Long siteId, String ids);

    /**
     * 停止运行中的任务
     *
     * @param taskId 任务ID
     * @return 如果停止成功返回true
     */
    public boolean stopTask(Long taskId);

    /**
     * 暂停运行中的任务
     *
     * @param taskId 任务ID
     * @return 如果暂停成功返回true
     */
    public boolean pauseTask(Long taskId);

    /**
     * 恢复暂停的任务
     *
     * @param taskId 任务ID
     * @return 如果恢复成功返回true
     */
    public boolean resumeTask(Long taskId);

    /**
     * 获取任务执行状态
     *
     * @param taskId 任务ID
     * @return 状态信息
     */
    public String getTaskStatus(Long taskId);

    /**
     * 测试站点采集
     *
     * @param siteId 站点ID
     * @param limit 测试项目数量
     * @return 测试结果信息
     */
    public String testCollection(Long siteId, Integer limit);
}